const validate = require('../middleware/validate')
//引入数据验证的两个成员
const { body, validationResult } = require('express-validator')

const md5 = require('../util/md5')

const { User } = require('../model')
exports.register = validate(
    [
        //1. 配置验证规则
        body('user.username').notEmpty().withMessage('用户名不能为空')
            .bail().custom(async username => {  //bail是所有验证规则通过之后执行,custom是自定义验证
                const usernames = await User.findOne({ username })
                if (usernames) {
                    return Promise.reject('用户名已存在')
                }
            }),
        body('user.password').notEmpty().withMessage('密码不能空'),
        body('user.email').notEmpty().withMessage('邮箱不能为空')
            .isEmail().withMessage('邮件格式不正确')
            .bail().custom(async email => {  //bail是所有验证规则通过之后执行,custom是自定义验证
                const user = await User.findOne({ email })
                if (user) {
                    return Promise.reject('邮箱已存在')
                }
            })
    ]
)

exports.login = [
    validate([
        body('user.email')
            .notEmpty().withMessage('邮箱不能为空'),
        
        body('user.password').notEmpty().withMessage('密码不能为空')
    ]),
    validate([
        body('user.email').custom(async (email, { req }) => {
            const user = await User.findOne({ email })
            .select(['email','username','bio','image','password'])
            if (!user) {
                return Promise.reject('用户不存在')
            }
            // 如果用户存在,将数据挂载到请求对象中, 后续的中间件也可以使用了
            req.user = user
        })
    ]),
    validate([
        body('user.password').custom(async (password,{req}) => {
            console.log(md5(password))
            console.log(req.user.password)
           if(md5(password)!=req.user.password){
               return Promise.reject('密码错误')
           }
        })
    ])
]